package com.vanysoft.business.system.licenseManager.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.vanysoft.business.system.licenseManager.controller.demo.LicenseObj;
import com.vanysoft.business.system.licenseManager.dao.TAuthorizeProductLicenseMapper;
import com.vanysoft.business.system.licenseManager.dao.TAuthorizeProductMapper;
import com.vanysoft.business.system.licenseManager.entity.TAuthorizeProduct;
import com.vanysoft.business.system.licenseManager.entity.TAuthorizeProductLicense;
import com.vanysoft.common.utils.Des.VanySoftLicenseUtil;
import com.vanysoft.framework.exception.VanySoftBaseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * 类名称：LicenseManagerService
 * 类描述：License管理
 * 创建人：X
 * 创建时间：2017年9月19日上午10:17:42
 * 修改人：X
 * 修改时间：2017年9月19日
 * 版本信息：@version 1.0
 * Copyright (c) 2017SharpClaw-版权所有
 * 修改备注：
 */
@Service
@Transactional(readOnly = true)
public class LicenseManagerService {

    @Autowired
    private TAuthorizeProductLicenseMapper tAuthorizeProductLicenseMapper;
    @Autowired
    private TAuthorizeProductMapper tAuthorizeProductMapper;

    /**
     * Function Name               loginValidate
     *
     * @return
     * @throws VanySoftBaseException
     * @description 获取所有可用的产品信息
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年9月17日下午10:50:45          X          Initial
     * *********************************************************************
     */
    public List<TAuthorizeProduct> queryAllAuthorizeProduct() {
        return tAuthorizeProductMapper.queryAllAuthorizeProduct();
    }

    /**
     * Function Name               loginValidate
     *
     * @return
     * @throws VanySoftBaseException
     * @description 插入一条产品注册信息
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年9月17日下午10:53:13          X          Initial
     * *********************************************************************
     */
    @Transactional
    public void insertAuthorizeProductLicense(TAuthorizeProductLicense record) {
        String licenseId = UUID.randomUUID().toString().replaceAll("-", "");
        record.setLicenseId(licenseId);
        tAuthorizeProductLicenseMapper.insertAuthorizeProductLicense(record);
    }

    @Transactional
    public void updateAuthorizeProductLicense(TAuthorizeProductLicense record) {
        tAuthorizeProductLicenseMapper.updateByPrimaryKey(record);
    }

    @Transactional
    public void deleteAuthorizeProductLicense(String licenseId) {
        tAuthorizeProductLicenseMapper.deleteByPrimaryKey(licenseId);
    }

    /**
     * Function Name               loginValidate
     *
     * @return
     * @throws VanySoftBaseException
     * @description 分页查询产品注册信息
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年9月17日下午11:11:50          X          Initial
     * *********************************************************************
     */
    public Map<String, Object> queryAuthorizeProductLicenses(Integer pageSize, Integer pageNum, String searchValue, String productCode) throws VanySoftBaseException {
        Map<String, Object> returnObj = new HashMap<>();
        Page<Map<String, Object>> page = new Page<>(pageNum, pageSize);
        List<Map<String, Object>> list = tAuthorizeProductLicenseMapper.queryInfoByProductCode(page, searchValue, productCode);
        returnObj.put("rows", list);
        returnObj.put("total", page.getTotal());
        return returnObj;
    }

    /**
     * Function Name               createLicense
     *
     * @return
     * @throws VanySoftBaseException
     * @description 生成License
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年9月18日下午7:38:00          KING          Initial
     * *********************************************************************
     */
    public String createLicense(TAuthorizeProductLicense record) throws VanySoftBaseException {
        String license = "";
        try {
            license = VanySoftLicenseUtil.createLicense(record.getSerialNo(), record.getStartDate(), record.getEndDate(), record.getCustomer(), record.getProductCode());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return license;
    }

    public boolean checkLicense(LicenseObj obj) throws VanySoftBaseException {
        return VanySoftLicenseUtil.checkOutLicense(obj.getSerialNo(), obj.getLicense());
    }
}
